import { parse } from 'compiler/parser/index'
import { generate } from './codegen'
import { optimize } from './optimizer'
import { createCompilerCreator } from 'compiler/create-compiler'
import { CompiledResult, CompilerOptions } from 'types/compiler'

// 创建一个编译器函数createCompiler，它接收一个配置对象并返回一个编译器实例
// 这个编译器实例可以用来编译模板字符串成渲染函数
export const createCompiler = createCompilerCreator(function baseCompile(
  template: string, // 模板字符串，需要被编译的Vue模板
  options: CompilerOptions // 编译选项，用于配置编译过程
): CompiledResult { // 函数返回编译后的结果，包括AST、渲染函数和静态渲染函数数组
  // 使用parse函数将模板字符串解析成AST
  const ast = parse(template.trim(), options)
  
  // 使用optimize函数对AST进行优化
  optimize(ast, options)
  
  // 使用generate函数将优化后的AST转换成渲染函数代码
  const code = generate(ast, options)
  
  // 返回编译结果，包括AST本身、渲染函数和静态渲染函数数组
  return {
    ast, // 抽象语法树，用于调试或进一步处理
    render: code.render, // 渲染函数，用于在Vue实例中渲染模板
    staticRenderFns: code.staticRenderFns // 静态渲染函数数组，用于渲染模板中的静态部分，以提高性能
  }
})
